"use strict";
// 1,对象  万物皆对象
// Object 表示一个js对象
let a2;
a2 = {};
a2 = function () { };
//1.1 下面这种常用 指定对象中的属性是啥要求
// {} 用于指定对象中可以包含哪些属性
// 语法 {属性名：属性值的类型，属性名：属性值（类型），}
// 属性名 后边加上？表示该属性可选
// 声明对象中属性的结构要求
// 定义对象结构类型  b2 是一个对象  并做对象里数据属性的类型新增
// 属性名和属性值都可以做限制。
let b2;
// 使用
b2 = { name: "孙悟空", age: 18 };
// [proName:string]:any 表示任意类型的属性
// [proName:string] 表示属性名任意
// any表示属性值任意
let c2;
// 使用
c2 = { name: "猪八戒", age: 18, gender: "男" };
// 1.2 函数  限制函数的返回值类型  参数类型
/**
 * 语法
 * (形参:类型,形参:类型,形参:类型.....)=>返回值类型
 */
// 定义 函数结构类型 声明d2 是一个函数 并做参数 返回值的数据类型限制
let d2;
// 使用
d2 = function (n1, n2) {
    return 0;
};
// 2,  数组   明确数组类型
// js可以存任何类型
// 数组 存相同的类型数据
/**
 * 语法：
 * 类型 []
 * Array<类型>
 */
let e2;
e2 = ["a", "b", "c"];
let e3;
e3 = ["2", "4", "s"];
// 3， 元组 ，固定长度的数组
// 语法 : [类型，类型，类型]
let h;
h = ["hello", "123"];
// 4,枚举  enum
// 固定几个值的数据 定义一个枚举类 Gender 名字可以改
// 把可能出现的值 写在这个对象上 更好的阅读性
var Gender;
(function (Gender) {
    Gender[Gender["Male"] = 0] = "Male";
    Gender[Gender["Female"] = 1] = "Female";
})(Gender || (Gender = {}));
let i;
i = {
    name: "孙悟空",
    gender: Gender.Male,
};
console.log(i.gender === Gender.Male);
// 5 &  表示同时 都要满足
let j;
j = { name: "孙悟空", age: 123 };
let m;
let l;
let k;
// 使用
k = 5;
// k=7
